package com.ck.datacenter.log.aop;

import org.apache.commons.lang.StringUtils;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

/**
 * TODO
 *
 * @author chenke
 * @version 1.0
 * @date 2021-12-24 11:01
 */
public class SpelUtil {

    /**
     * 用于SpEL表达式解析.
     */
    private static SpelExpressionParser parser = new SpelExpressionParser();

    public static String parseSpEL(String spELString, Object[] param, String[] parameterNames) {
        try {
            if (StringUtils.isBlank(spELString)) {
                return spELString;
            }
            if (param == null || param.length == 0) {
                return spELString;
            }
            // 解析过后的Spring表达式对象
            Expression expression = parser.parseExpression(spELString);
            // spring的表达式上下文对象
            EvaluationContext context = new StandardEvaluationContext();
            // 给上下文赋值
            for (int i = 0; i < param.length; i++) {
                context.setVariable(parameterNames[i], param[i]);
            }

            return expression.getValue(context).toString();
        } catch (Exception e) {
            System.out.println("解析异常");
            return spELString;
        }
    }
}
